package leetcode_core.leetcode_2;

import java.util.HashMap;
import java.util.Map;

public class BuildTree {
    public class TreeNode {
          int val;
          TreeNode left;
          TreeNode right;
          TreeNode(int x) { val = x; }
    }
    private Map<Integer, Integer> map;
  /**
   *
   * @param preorder 先序遍历
   * @param inorder  后续遍历
   * @return
   */
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        map = new HashMap<>();
        for(int i = 0;i<inorder.length;i++){
            map.put(inorder[i],i);
        }
        return buildTree(preorder,inorder,0,0);
    }

    //二叉树递归的核心思路:
    //将操作交给递归
    //写出框架
    //确定base-case
    //一个最重要的过程是:定义递归函数的含义

    /**
     *
     * @param preorder
     * @param inorder
     * @param leftBound 以root为根节点的左子树的根节点的下标
     * @param inStart   以root为根节点所寻找的下一个节点的下标
     * @return
     */
    private TreeNode buildTree(int[] preorder, int[] inorder,int leftBound,int inStart){
        TreeNode root = new TreeNode(inorder[inStart]);

        return root;
    }







}
